home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / utilitys / botmenu1 / part01
Encoding:
Internet Message Format  |  1991-05-18  |  42.5 KB

  1. Path: news.larc.nasa.gov!amiga-request
  2. From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Subject: v91i104: Bootmenu 1.0 - yet another ntsc/pal switcher, Part01/01
  4. Reply-To: "John Davis, chem dept, Uni of Canty, NZ" <CHEM194@cantva.canterbury.ac.nz>
  5. Newsgroups: comp.sources.amiga
  6. Message-ID: <comp.sources.amiga:v91i104@ab20.larc.nasa.gov>
  7. Date: 18 May 91 01:45:17 GMT
  8. Approved: tadguy@uunet.UU.NET (Tad Guy)
  9. X-Mail-Submissions-To: amiga@uunet.uu.net
  10. X-Post-Discussions-To: comp.sys.amiga.misc
  11.  
  12. Submitted-by: "John Davis, chem dept, Uni of Canty, NZ" <CHEM194@cantva.canterbury.ac.nz>
  13. Posting-number: Volume 91, Issue 104
  14. Archive-name: utilities/bootmenu-1.0/part01
  15.  
  16. [ includes uuencoded executable and icon  ...tad ]
  17.  
  18. Bootmenu - YANPS (yet another ntsc/pal switcher). This program allows 
  19. you to switch between NTSC and PAL if you have an obese agnus (8372).
  20. Where it differs from the rest (Matt Dillon's BPD and Nico Francois
  21. PALBoot) is that it allows for an interactive choice of options at 
  22. boot time, via a graphical interface. Also, it gives you the option
  23. of turning off ALL your expansion boards, allowing you to disable
  24. your hard-disk (makes it harder for virii to attack it). Can also be
  25. useful in that respect to allow testing of software on a 'bare bones'
  26. machine (as it also turns off any expansion memory). 
  27.  
  28. Contains code that acts as an alternative to the 1mb chip ram patch
  29. CBM's setpatch installs, curing the problems with the setpatch code
  30. failing on a double-reboot.
  31.  
  32. Includes assembler source (Hisoft DevPac) - tested on 1.3 and 1.2 ROMs,
  33. unknown if it works on 2.0 (though I somehow doubt it).
  34.  
  35. #!/bin/sh
  36. # This is a shell archive.  Remove anything before this line, then unpack
  37. # it by saving it into a file and typing "sh file".  To overwrite existing
  38. # files, type "sh file -c".  You can also feed this as standard input via
  39. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  40. # will see the following message at the end:
  41. #        "End of archive 1 (of 1)."
  42. # Contents:  bootmenu.doc bootmenu.s bootmenu.uu bootmenu0.uu
  43. # Wrapped by tadguy@ab20 on Fri May 17 21:45:16 1991
  44. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  45. if test -f 'bootmenu.doc' -a "${1}" != "-c" ; then 
  46.   echo shar: Will not clobber existing file \"'bootmenu.doc'\"
  47. else
  48. echo shar: Extracting \"'bootmenu.doc'\" \(10456 characters\)
  49. sed "s/^X//" >'bootmenu.doc' <<'END_OF_FILE'
  50. XBootMenu v1.0
  51. XBy J davis
  52. X09/1990
  53. X
  54. X
  55. XSynopsis
  56. X--------
  57. X
  58. XBootmenu - a program to allow graphical, interactive selection of NTSC/PAL
  59. Xscreen  modes  and  the  enabling/disabling of hard-disks on every reboot.
  60. XAlso  acts  as a partial replacement for CBM's setpatch program.  Includes
  61. Xsource code in Assembler. Version 1.0 (first release). Author - John Davis
  62. X
  63. XPurpose
  64. X-------
  65. X
  66. XBootMenu serves three purposes :-
  67. X
  68. XFirstly  it  allows  you to disable your auto-configing hard-disk (and all
  69. Xother  auto-config  devices)  so  as to minimise the chances of a virus or
  70. Xtrojan  horse  attacking  your  hard-disk when booting of a game disk, and
  71. Xalso to help with running some games/demos that won't run with a hard-disk
  72. Xactive.
  73. X
  74. XSecondly,  for people with the 1mb Fat Agnus (8372), it offers a choice of
  75. XNTSC  and  PAL screen modes.  PAL is useful for in the USA, as it offers a
  76. X25%  increase  in  screen  area (at the expense of being incompatible with
  77. XNTSC  genlocks etc), whilst NTSC is useful for the rest of the world, as a
  78. Xlot  of  games  are  written for NTSC sized screens, and the graphics only
  79. Xdisplay  the correct aspect ratio in NTSC mode ( F/A-18 has to be the best
  80. Xexample  of  this,  playing  f/a-18  on  a  PAL  screen  gives  you a very
  81. X'squished' looking plane!)
  82. X
  83. XThirdly,  it  acts as an improved version of CBM's 'setpatch r' for people
  84. Xwith  1mb  of  chip  memory.   CBM's  reboot handler will only survive ONE
  85. Xreboot,  meaning  that if you use rad, reboot off a floppy and then reboot
  86. Xagain, the contents of rad:  are GONE!!!  The reboot handler this installs
  87. Xis  much  more  reliable  -  it  will  only fail if exec is so damaged the
  88. Xmachine _must_ coldboot.
  89. X
  90. XWhat's  more,  since  it  'wedges' itself into the system you only need to
  91. Xload  it  once - it will survive reboots, which is handy if you're playing
  92. Xseveral games in a row and don't want to have to re-boot off the hard-disk
  93. Xto reselect screen mode, all you do is reboot and BootMenu will let you
  94. Xselect system options once again.
  95. X
  96. XInstallation
  97. X------------
  98. X
  99. XJust  run  BootMenu  -  either  from the CLI or WorkBench (there's an icon
  100. Xprovided,  though  it's no artistic masterpiece - I'm a programmer, not an
  101. Xartist).  You should get a message saying that it's installed ok.
  102. X
  103. XIMPORTANT  -  do  NOT run the WorkBench1.3.2 Setpatch program with the 'r'
  104. Xoption  (option  to  patch  for  rad:   and  1mb  ram)  after you have run
  105. XBootMenu,  as  both  use  the same vector, and hence SetPatch will disable
  106. XBootMenu!  You should run Setpatch _without_ the 'r' option!!
  107. X
  108. XAlso see the section 'virus checkers and BootMenu'
  109. X
  110. XUsage
  111. X-----
  112. X
  113. XOnce it's installed, the next time you reboot you should be presented with
  114. Xa  menu  screen  asking  whether  or  not  to  turn  off all the machine's
  115. Xexpansion  boards.  Click the left button to select 'on' - this will leave
  116. Xyour hard-disk, expansion memory etc enabled, or click the right button to
  117. Xselect 'off' and turn off all the boards.  If you don't make any selection
  118. Xwithin  10  seconds, the program will default to the 'no' option and leave
  119. Xall your boards turned on.
  120. X
  121. XIf  you've  got  a 1mb Obese Agnus fitted, you'll then be presented with a
  122. Xsecond  screen,  allowing a choice of PAL screen modes (click left button)
  123. Xor  NTSC  (click  right  button).   Again,  if no choice is made within 10
  124. Xseconds the program will default to PAL.
  125. X
  126. XThe machine will then carry on it's normal boot sequence ....
  127. X
  128. XTechnical Info
  129. X--------------
  130. X
  131. XThis  program  uses  BOTH a coldcapture and coolcapture handler to do it's
  132. Xwork.
  133. XThe  coldcapture  handler  is  simply  used  to  fix  the KickStart1.x bug
  134. Xregarding  1mb  of  chip  mem.  The bug is that ks1.x treats any amount of
  135. Xchip  memory  greater  than  512k  as  abnormal,  and will do a total cold
  136. Xreboot,  clearing any cold/cool handlers.  Our cold-handler fixes this bug
  137. Xin the rom, mainly so as to make our cool-handler actually get a chance to
  138. Xrun, but as an added bonus it also acts as an improved version of setpatch
  139. Xwith the 'r' option.
  140. X
  141. XThe  trouble  with  the CBM 'setpatch r' is that it doesn't stick around -
  142. Xthe  coldcapture  vector they (and I) use gets cleared after use, hence if
  143. Xyou  want  to survive multiple reboots you need to re-insert yourself into
  144. Xthe  system.  Setpatch fails to do this and hence can fail to protect rad:
  145. Xif  you  reboot twice in a row without reloading setpatch.  We DO reinsert
  146. Xourselves, so unless the system is totally rebooted (as will happen if you
  147. Xget  serious  enough  memory  corruption from a guru, or from some games),
  148. XBootMenu should protect rad:.
  149. X
  150. X       Moral of the story - use BootMenu instead of setpatch r!!!
  151. X
  152. X  Note also that you should ONLY use BootMenu with KickStart 1.x!!!!
  153. X
  154. XThe  main  code  for  running  the screens etc is hung off the coolcapture
  155. Xvector.   Being  on  coolcapture  as  opposed  to coldcapture allows us to
  156. Xaccess  much  more  of  the system, as most of the machine is setup by the
  157. Xtime coolcapture runs (this is important if we want to access exec.library
  158. Xfunctions such as addmem)
  159. X
  160. XThe  menu driver runs all the hardware direct (intuition isn't in a usable
  161. Xstate when coolcapture runs), using the window controls so as to make each
  162. Xscreen  only  take up 1k for it's bitmap as opposed to the usual 21k.  All
  163. Xscreens are only 1 plane deep (to conserve memory).  The copper is used to
  164. Xrun  the screen itself, and also to get more than 1 colour off the 1 plane
  165. Xscreen (reloading the palette on a per-scanline basis)
  166. X
  167. XThe  'core'  of  bootmenu (approx 2.5k of code, of which 2k is the bitmaps
  168. Xfor the display, the actual code fits in approx 512k bytes!) installs onto
  169. Xthe  bottom of the system stack, to avoid having to use kickmemptr to keep
  170. Xour  memory allocated.  As the system stack is 6k, and only 1k is normally
  171. Xused  this  shouldn't  be a problem (bootmenu uses the opposite end of the
  172. Xstack  -  there's  still  at least 2k free).  If worse comes to worse and
  173. Xthe  system  stack  grows  large (due to nested exceptions), all that will
  174. Xhappen will be that BootMenu is overwritten - it will not cause the system
  175. Xto  lock  up  in normal operation.  
  176. X
  177. XAs  we  can't  guarantee  the system stack will be in chip mem, the screen
  178. Xdata  and  copper  list  is  swapped into and out of chip memory (swapping
  179. Xpreserves  the  original memory contents - in case rad:  was somehow using
  180. Xthe  target  memory ).  I haven't tested the effect of using MoveSSP (a pd
  181. Xprogram  which places the system stack in fast ram) but I would guess it's
  182. Xuse  would  prevent  BootMenu  from functioning (as expansion memory isn't
  183. Xaccessible during the reboot process). 
  184. X
  185. XThe NTSC/PAL switch code simply alters the mode bit on the 1mb agnus.
  186. XThe  expansion board disable code is slightly more artistic - it scans for
  187. Xexapansion  boards  waiting  to  be  configured , and either tells them to
  188. Xshuptup  (if they support it) or configures them out of the way.  Hence by
  189. Xthe  time  expansion.library  gets  run  there's  no boards around - hence
  190. Xnothing gets config'd and added to the system.
  191. X
  192. XPeople who bother to read the included source code will notice it possible
  193. Xto  build  a  version  that  will do an AddMem of non-autoconfig memory on
  194. Xreboot.   This  was  done  so as to allow a friend (hi peter!) with an old
  195. XRonin accelerator board to do a 'fake autoconfig' on his memory as opposed
  196. Xto  being  forced  to  run a cli 'addmem' on every reboot.  As most memory
  197. Xboards  are autoconfig nowdays, I haven't released the executable for that
  198. Xversion  -  but  the  source  code be useful for anyone wanting to build a
  199. Xsimple  memory  board.  Note that in the addmem code I set the priority of
  200. Xthe  ram  to  -20  to make sure the 2090a driver uses the chipmem for it's
  201. Xbuffers,  as  the  ronin memory is NOT capable of being DMA'd to.  If your
  202. Xmemory  does support DMA, you should raise it's priority to >0 to make the
  203. Xdriver and libraries use it, as this will maximise the amount of free chip
  204. Xmem you will have after reboot.
  205. X
  206. XThe  program  was assembled using Hisoft's DevPac v2 - it should be fairly
  207. Xsimle to alter the code to assemble under other assemblers however.
  208. X
  209. X
  210. XVirus Checkers and BootMenu
  211. X---------------------------
  212. X
  213. XAs  BootMenu hangs around by much the same mechanism as some viruses, most
  214. Xgood  virus checkers will give you some warning when run about ColdCapture
  215. Xand CoolCapture being set and the possibility that this represents a virus
  216. Xin the system.
  217. X
  218. XIf  you  use  VMK,  you  will  actually be able to see an embedded message
  219. Xconfirming  that  the  program  on cold|coolcapture is only BootMenu, with
  220. Xother packages your actions may need to be different.
  221. X
  222. XIf  you're  at  all unsure that what's on the vectors may NOT be bootmenu,
  223. Xyou  should  re-run  BootMenu,  as  this  will  over-write the vectors and
  224. Xre-install  itself,  disabling  any  virus  that may have been using them.
  225. XSimply  clearing  the  vectors  (thru  your  virus  checker)  will disable
  226. Xbootmenu.
  227. X
  228. XAs  long  as  you get BootMenu's screens on reboot, you can be 90% sure no
  229. Xvirus  is  using  the  coldcapture  and  coolcapture vectors - however you
  230. Xshould still be cautious, as a virus could pass execution to my code if it
  231. Xwanted  to  be  clever (haven't yet seen a virus that clever though!).
  232. X
  233. XAlso,   as   some  newer  viruses  stay  in  memory  _without_  using  the
  234. Xcold/coolcapture vectors, so you should stil run virus checkers!
  235. X
  236. XGeneral Info
  237. X------------
  238. X
  239. XI  would  like to thank all the people on AmigaINFO BBS who helped in beta
  240. Xtesting  this  program,  especially  Peter.B  Mcintyre, John Nettleton and
  241. XStephen  Webber,  all of whom were always only too willing to download new
  242. Xtest  versions  at  weird  hours  to  help  out  with  testing the code on
  243. Xdiffering machine setups.
  244. X
  245. XIf you have any questions about the program, or bug-reports, feel free to
  246. Xcontact me.
  247. X
  248. XThe source code and executable are 100% public domain - use or abuse it as
  249. Xyou  see fit.  If you'd like to use BootMenu on a commercial package, feel
  250. Xfree,  though an acknowledgement (or a free copy of the package!) would be
  251. Xnice!
  252. X
  253. XYou can contact me via the following routes :-
  254. Xmail on internet/usenet/bitnet/janet et al :
  255. X  
  256. X     chem194@canterbury.ac.nz 
  257. X     "meaningful userid's are for wimps" :-)
  258. X
  259. XBBS email:
  260. X     'JOHN DAVIS' on      AmigaINFO BBS
  261. X                          ph NZ+3-3371531
  262. X                          24 hours a day 1200/2400 baud ccitt (v22/v22bis)
  263. X
  264. X
  265. XSnail Mail if you must to:
  266. X     John Davis
  267. X     31 Clarence St
  268. X     ChristChurch 2
  269. X     New Zealand
  270. X
  271. X
  272. X
  273. XENJOY!!!
  274. X
  275. END_OF_FILE
  276. if test 10456 -ne `wc -c <'bootmenu.doc'`; then
  277.     echo shar: \"'bootmenu.doc'\" unpacked with wrong size!
  278. fi
  279. # end of 'bootmenu.doc'
  280. fi
  281. if test -f 'bootmenu.s' -a "${1}" != "-c" ; then 
  282.   echo shar: Will not clobber existing file \"'bootmenu.s'\"
  283. else
  284. echo shar: Extracting \"'bootmenu.s'\" \(21253 characters\)
  285. sed "s/^X//" >'bootmenu.s' <<'END_OF_FILE'
  286. X; BootMenu by J Davis 09/1990
  287. X;
  288. X; version 1.0 - beta 05
  289. X;
  290. X; assembled using HiSoft DevPac v2
  291. X;
  292. X; a little program to allow choice of NTSC/PAL screen mode
  293. X; and expansion boards enabled/disabled at boot-time
  294. X;
  295. X; hangs around via both cool and coldcapture (see note 1)
  296. X;
  297. X; on each reboot puts up a menu allowing mode choice
  298. X;
  299. X; if there's no input in 10 secs, it defaults to the left most
  300. X; option ( PAL and boards ON respectively )
  301. X;
  302. X;
  303. X; note 1 : on machines with 1mb of chip, due to a slight oversight
  304. X;          in the 1.3/1.2 kickstart reset routine, EVERY reboot causes
  305. X;       a TOTAL system rebuild. This of course makes it hard to make
  306. X;          our code hang around.
  307. X;
  308. X;         Hence, we add a coldcapture handler that fixes the bug,
  309. X;          then run our menu routine of coolcapture
  310. X;
  311. X;          Hence our coldcapt routine also acts as an IMPROVED setpatch R,
  312. X;          in that two reboots in a row KILLS setpatch r, wheras ours,
  313. X;          hangs around and hence protects RAD: properly. Therefore 
  314. X;          DO NOT use SetPatch r and BootMenu at the same time!
  315. X;
  316. X;
  317. X; note 2 : if do_addemem is set to 1, this will build a version
  318. X;          that does an addmem of memory on the ronin 020 board
  319. X;          on the fly, due to the ronin mem not being dma-able we
  320. X;          have to set a low pri on the mem
  321. X; 
  322. X
  323. X        ; turn on debug info and turn off optimising
  324. X        OPT    D+
  325. X        OPT     O-
  326. X
  327. X;======================
  328. X
  329. Xdo_addmem    equ    0    ; flag for whether we do an addmem
  330. X                ; for hurricane board as well
  331. X
  332. X;======================
  333. X
  334. X
  335. X    IFNE    do_addmem=1
  336. X        FORMAT 0-,1-,2-
  337. X        LIST
  338. X        ; building PBMC_BootMenu
  339. X        NOLIST
  340. X        output    PBMC_BootMenu
  341. X    ELSEIF
  342. X        FORMAT 0-,1-,2-
  343. X        LIST
  344. X        ; building normal BootMenu
  345. X        NOLIST
  346. X        output    bootmenu
  347. X    ENDC    
  348. X
  349. Xchip_addr    equ    $40000    ; where we swap our chip data to/from
  350. X
  351. X; process structure offsets
  352. X
  353. Xpr_cli        equ    $0Ac    ; process cli flag offset
  354. Xpr_msgport    equ    $05c    ; process msgport offset
  355. X
  356. X; execbase structure offsets
  357. X
  358. Xcoldcapture    equ    $02a
  359. Xcoolcapture    equ    $02e
  360. Xsysstklower    equ    $03a
  361. X        
  362. X; misc library functions
  363. X
  364. Xforbid        equ    -$084    ; offsets for various exec and int calls
  365. Xgetmsg        equ    -$174    ; saves long includes and compile times
  366. Xreplymsg    equ    -$17a
  367. Xwaitport    equ    -$180
  368. Xfindtask    equ    -$126
  369. Xautoreq        equ    -$15c
  370. Xopenlib        equ    -$228
  371. Xcloselib    equ    -$19e
  372. X
  373. Xoutput        equ    -$003c        
  374. Xwrite        equ    -$0030
  375. X
  376. Xopenlibrary    equ    -$0228
  377. Xcloselibrary    equ    -$019e
  378. X
  379. Xaddmemlist     equ    -618    
  380. X
  381. X; hardware equates 
  382. X
  383. Xpotgor        equ    $dff016
  384. Xpotgo        equ    $dff034
  385. X
  386. Xintreq        equ    $dff09c
  387. Xintreqr        equ    $dff01e
  388. X
  389. Xddfstart    equ    $dff092
  390. Xddfstop        equ    $dff094
  391. X
  392. Xdiwstart    equ    $dff08e
  393. Xdiwstop        equ    $dff090
  394. X
  395. Xbpl1mod        equ    $dff108
  396. X
  397. Xbplcon1        equ    $dff102
  398. Xbplcon0        equ    $dff100
  399. X
  400. Xr_color0    equ    $0180
  401. Xr_color1    equ    $0182
  402. X
  403. Xr_bpl1pth    equ    $00e0
  404. Xr_bpl1ptl    equ    $00e2
  405. X
  406. Xcop1lch        equ    $dff080
  407. Xcop1lcl        equ    $dff082
  408. Xcopjmp1        equ    $dff088
  409. X
  410. Xdmacon        equ    $dff096
  411. X
  412. Xagnusdetect    equ    $dff004
  413. X
  414. X;==============================================================
  415. X
  416. Xstartup:    ; startup code - determine if run from wb/cli etc
  417. X    
  418. X        move.l    $4,a6
  419. X        move.l    #0,a1
  420. X        jsr    findtask(a6)        ; find ourselves
  421. X
  422. X        move.l    d0,a4            ; save our process pointer
  423. X
  424. X        move.l    pr_cli(a4),d0
  425. X        bne    fromdos            ; was a DOS startup
  426. X
  427. X        ; was started from WB
  428. X
  429. Xfromwb:        lea    pr_msgport(a4),a0
  430. X        jsr    waitport(a6)        ; wait for startup msg
  431. X        lea    pr_msgport(a4),a0
  432. X        jsr    getmsg(a6)        ; get the wb msg
  433. X
  434. X        move.l    d0,wbmsg        ; save pointer to our startup msg
  435. X        move.l    #1,wb            ; flag we started from wb
  436. X
  437. X        lea    intuiname,a1
  438. X        move.l    #0,d0
  439. X        move.l    $4,a6
  440. X        jsr    openlib(a6)         ; open intuition lib
  441. X
  442. X        move.l    d0,a6            ; save ibase
  443. X        
  444. X        move.l    #0,a0            ; window to display in
  445. X        move.l    #bodyitext1,a1        ; body text
  446. X        move.l    #gaditext,a2         ; postive text
  447. X        move.l    #gaditext,a3          ; negative text
  448. X        move.l    #0,d0            ; pflags
  449. X        move.l    #0,d1            ; nflags
  450. X        move.l    #370,d2            ; width
  451. X        move.l    #80,d3            ; height
  452. X        jsr    autoreq(a6)        ; request user confirmation
  453. X
  454. X        move.l    a6,a1            ; close intuition lib
  455. X        move.l    $4,a6
  456. X        jsr    closelib(A6)
  457. X
  458. X        bsr    install            ; install ourselves
  459. X
  460. X        bra    exit
  461. X
  462. Xfromdos:    ; was run from dos - output message to stdout
  463. X
  464. X        move.l    $4,a6
  465. X        lea    dosname,a1
  466. X        move.l    #$0,d0
  467. X        jsr    openlibrary(a6)         ; open dos library
  468. X        
  469. X        move.l    d0,a6             ; save dos base
  470. X        
  471. X        jsr    output(a6)         ; get handle on stdout
  472. X        
  473. X        move.l    d0,d1             ; get file handle
  474. X        move.l    #msgtxt,d2
  475. X        move.l    #etext-msgtxt,d3
  476. X        jsr    write(a6)         ; put up a message saying we're installed
  477. X        
  478. X        move.l    $4,a6
  479. X        move.l    a6,a1
  480. X        jsr    closelibrary(a6)     ; close dos
  481. X
  482. X        bsr    install        
  483. X
  484. Xexit:        move.l    wb,d0
  485. X        cmp.l    #0,d0            ; was this a CLI invocation
  486. X        beq    exit_dos        ; DOS - just exit 
  487. X
  488. X        ; workbench exit
  489. X
  490. X        move.l    $4,a6
  491. X        jsr    forbid(a6)        ; lock out everyone else
  492. X
  493. X        move.l    wbmsg,a1
  494. X        jsr    replymsg(a6)        ; reply to Wbstartup msg
  495. X
  496. Xexit_dos:    move.l    #0,d0            ; return with return code 0
  497. X        rts            
  498. X
  499. X;=================================================
  500. X        even
  501. Xwb:        dc.l    0            ; run mode flag 0=dos process 1=wbprocess
  502. Xwbmsg:        dc.l    0            ; where we save our workbench msg
  503. X
  504. X        even
  505. Xintuiname:    dc.b    "intuition.library",0
  506. X        
  507. X        even
  508. Xdosname:    dc.b    "dos.library",0
  509. X
  510. X        ; message we output for cli startup
  511. X    IFNE    do_addmem=1
  512. Xmsgtxt:        dc.b    27,"[33mBootMenu PBMC",27,"[0m, by J Davis 09/1990",10
  513. X    ELSEIF
  514. Xmsgtxt:        dc.b    27,"[33mBootMenu v1.0",27,"[0m, by J Davis 09/1990",10
  515. X    ENDC
  516. X        dc.b    "installed ok - menu will become active at next reboot",10,0
  517. Xetext:        dc.b    0
  518. X
  519. X        even
  520. X
  521. X        ; stuff for our autorequester for wb usage
  522. Xbodyitext1:    dc.b    2           ; front pen
  523. X        dc.b    1           ; back pen
  524. X        dc.b    0           ; draw mode
  525. X        dc.w    40           ; leftedge
  526. X        dc.w    6           ; topedge
  527. X        dc.l    0           ; textattr = default
  528. X        dc.l    bodytext1      ; actual text
  529. X        dc.l    bodyitext2         ; next
  530. X
  531. Xbodyitext2:    dc.b    3           ; front pen
  532. X        dc.b    0           ; back pen
  533. X        dc.b    0           ; draw mode
  534. X        dc.w    120           ; leftedge
  535. X        dc.w    26           ; topedge
  536. X        dc.l    0           ; textattr = default
  537. X        dc.l    bodytext2      ; actual text
  538. X        dc.l     bodyitext3    ; next
  539. X
  540. Xbodyitext3:    dc.b    3           ; front pen
  541. X        dc.b    0           ; back pen
  542. X        dc.b    0           ; draw mode
  543. X        dc.w    20           ; leftedge
  544. X        dc.w    36           ; topedge
  545. X        dc.l    0           ; textattr = default
  546. X        dc.l    bodytext3      ; actual text
  547. X        dc.l    0         ; next
  548. X
  549. Xgaditext:    dc.b    0        ; front pen
  550. X        dc.b    0        ; back pen
  551. X        dc.b    0        ; draw mode
  552. X        dc.w    4        ; leftedge
  553. X        dc.w    4        ; topedge
  554. X        dc.l    0        ; textattr = default
  555. X        dc.l    gadtext        ; actual text
  556. X        dc.l    0        ; next
  557. X        
  558. X        ; actual text for our requester
  559. X
  560. X    IFNE    do_addmem=1
  561. Xbodytext1:    dc.b    "BootMenu PBMC, by J Davis 09/1990",0
  562. X        ELSEIF
  563. Xbodytext1:    dc.b    "BootMenu v1.0, by J Davis 09/1990",0
  564. X    ENDC
  565. Xbodytext2:    dc.b    "installed ok",0
  566. Xbodytext3:    dc.b    "menu will become active at next reboot",0
  567. Xgadtext:    dc.b    "Ok",0
  568. X
  569. X;=====================================================
  570. X
  571. X        even
  572. X
  573. Xinstall:    ; this routine does the actual cold/coolcapture
  574. X        ; setting 
  575. X
  576. X        ; works out where we're going to install to
  577. X        ; then copies handler code there and hooks vectors
  578. X        
  579. X        move.l    $4,a6
  580. X        move.l    sysstklower(A6),a0            ; get pointer to base of sys-stack
  581. X        move.l    a0,codetarget                ; save pointer to address
  582. X
  583. X        move.l    a0,a1
  584. X        add.l    #coldcapt-captstart,a1            ; point to coldcapt address
  585. X        move.l    a1,coldcaptaddr                ; save address
  586. X
  587. X        move.l    a0,a1
  588. X        add      #coolcapt-captstart,a1            ; point to coolcapt addres
  589. X        move.l    a1,coolcaptaddr                ; save address
  590. X
  591. X        ; now stuff our code away on the bottom of the system stack
  592. X
  593. X        lea    captstart(pc),a1            ; code to copy
  594. X        move.l    codetarget,a2                 ; where to copy to
  595. X        move.l    #endcapt-captstart,d0             ; amount to copy
  596. Xmloop:        move.b    (a1)+,(a2)+
  597. X        dbf    d0,mloop
  598. X
  599. X        ; now install a vector to the copied code in execbase.coldcapture
  600. X        
  601. X        move.l    $4,a6                       ; get execbase
  602. X        move.l    coldcaptaddr,a0                ; address of our coldcap routine
  603. X        move.l    a0,coldcapture(a6)             ; set coldcapture
  604. X
  605. X        move.l    coolcaptaddr,a0                ; address of our coolcap routine
  606. X        move.l    a0,coolcapture(a6)            ; set coolcapture to our code
  607. X
  608. X        ; finally, recalc the execbase checksum
  609. X        
  610. X        lea    34(a6),a0                 ; start of checksummed area in execbase
  611. X        move.w    #$16,d0                     ; number of checksummed words
  612. X        move.w    #$0,d1                     ; clear counter
  613. X    
  614. Xsum:        add.w    (A0)+,d1                 ; sum execbase and update checksum
  615. X        dbf    d0,sum
  616. X    
  617. X        not.w    d1
  618. X        move.w    d1,82(a6)                 ; set new execbase checksum
  619. X
  620. X        ; all done
  621. X        rts
  622. X
  623. X        even
  624. X        
  625. Xcodetarget:    dc.l    0
  626. Xcoolcaptaddr:    dc.l    0
  627. Xcoldcaptaddr:    dc.l    0
  628. X        
  629. X;==============================================================
  630. X;
  631. X; our capture routines
  632. X;
  633. X; since this is going to stick around, we need to copy
  634. X; it somewhere safe - like the SysStack area
  635. X;
  636. X; since we can't guarantee sys-stack will be in chip, we 
  637. X; swap our bitplane data and copper list to chip mem on the fly
  638. X; and then swap it back out ( in case rad: was using the bit where
  639. X; we put our screen ! )
  640. X
  641. X        even
  642. X
  643. Xcaptstart:    
  644. X
  645. Xcoldcapt:    ; this is our coldcapture routine - basically
  646. X        ; fixes the rebuild problem that SETPATCH R tries
  647. X        ; ( but fails ) to
  648. X
  649. X        ; CAUTION!! This code is _specific to kickstart 1.x
  650. X        ; DO NOT USE WITH KickStart 2.x!!!
  651. X
  652. X        ; important - reinsert our code into execbase, as coldcapt
  653. X        ; is cleared before it's called!! this is what setpatch r
  654. X        ; fails to do (and hence why it's not reliable)!
  655. X
  656. X        lea    coldcapt(pc),a0                ; on entry A6=execbase
  657. X        move.l    a0,coldcapture(a6)            ; reset our vector in execbase - don't need to resum
  658. X
  659. X        ; the following is a kludge to get around exec 34.x
  660. X        ; insisting on doing a system rebuild if >512k chip
  661. X        ; it is directly based on the rom code in ks1.2/1.3
  662. X        
  663. X        bchg    #1,$bfe001                ; toggle led on
  664. X        
  665. X        move.l    $fc0010,d0                ; get ks ver no.
  666. X        cmp.l    $14(a6),d0                ; compare with execbase ver
  667. X        bne.s    rebuild_all
  668. X
  669. X        ; the following is the bit that's wrong with ks1.x
  670. X        ; now fixed to work with 1mb chipmem
  671. X        
  672. X        move.l    $3e(a6),a3                ; get maxchipmem
  673. X        cmpa.l    #$100000,a3                ; more than 1mb chip ?
  674. X        bhi.s    rebuild_all
  675. X        
  676. X        add.l    #$1e,a5                    ; point A5 past the (incorrect) code we skip
  677. X        jmp    (A5)                    ; carry on with rest of boot
  678. X
  679. Xrebuild_all:    jmp    $fc01ce                    ; jump to rom rebuild code
  680. X
  681. X;====================================================================
  682. X
  683. X        even
  684. X
  685. Xcoolcapt:    ; our coolcapture routine - actually does the menus etc
  686. X
  687. X        movem.l    d0-d7/a0-a6,-(a7)            ; save everything
  688. X
  689. X        bsr    swapmem                    ; first, copy our bitplane data and copper list to chip mem
  690. X
  691. X        move.w    #$ffff,potgo                 ; set for button inputs on mouse
  692. X        
  693. X        ; finished setting up - ask whether to turn boards off
  694. X        
  695. X        move.l    #chip_addr+board_mode-chipdata_start,a1    ; address where bitplane data is copied to
  696. X        bsr     doscreen                ; put up screen and wait for choice
  697. X
  698. X        btst    #0,d0
  699. X        beq.s    next                    ; left mouse=leave on so skip
  700. X
  701. X        ; user requested expansion board disable - do it
  702. X
  703. X        moveq.l    #$7,d1                    ; max no boards we fix = 8 
  704. X
  705. Xbchk:        move.w    $e80008,d0                ; get flag byte from board
  706. X        not.w    d0                    ; invert
  707. X        btst.l    #14,d0                    ; see if board supports shut_up
  708. X        beq.s    shut_up                    ; bit=0 means board shuts up ok
  709. X
  710. X        ; board doesn't support shut up, so 
  711. X        ; config board to $200000 (only gap big enough for 8mb boards)
  712. X        
  713. X        move.w    #$0000,$e8004a              ; fake board out to $200000
  714. X        move.w    #$2000,$e80048  
  715. X        
  716. X        bra.s    nboard                    ; carry on
  717. X
  718. Xshut_up:    move.b    #$ff,$e8004c                ; tell the board to shut up
  719. X
  720. Xnboard:        dbf    d1,bchk                    ; loop thru all boards
  721. X
  722. X        ; now query for screen mode
  723. Xnext:        ; see if this machine has the 1mb Agnus
  724. X
  725. X        move.w    agnusdetect,d0
  726. X        and.w    #$2000,d0
  727. X        beq.s    no_8372                    ; doesn't have obese agnus - skip screen mode choice
  728. X
  729. X        ; has the 1mb agnus, offer screen mode choice
  730. X
  731. X        move.l    #chip_addr+scr_mode-chipdata_start,a1    ; address where bitplane data is copied to
  732. X        bsr    doscreen                ; put up screen and wait for choice
  733. X
  734. X        btst    #0,d0                    ; left mouse = PAL
  735. X        beq.s    go_pal
  736. X
  737. X        move.w    #$0000,$dff1dc                ; set NTSC mode on agnus
  738. X        bra.s    no_8372
  739. X
  740. Xgo_pal:        move.w    #$0020,$dff1dc                ; set PAL mode on agnus
  741. X        
  742. Xno_8372:    bsr    swapmem                    ; finally restore chipmem    
  743. X
  744. X    IFNE do_addmem=1 
  745. X    
  746. X        FORMAT    0-,1-,2-
  747. X        LIST
  748. X        ; adding special addmem code!
  749. X        NOLIST
  750. X        
  751. X        ; Addmem the 32 bit mem on the Ronin 020 board
  752. X        ; into the system
  753. X        ;
  754. X        ; we add 1mb, starting at $600000
  755. X
  756. X        move.l    $4,a6        ; get execbase
  757. X        move.l    #$100000,d0    ; amount of mem we're adding ( 1mb )
  758. X        move.l    #$5,d1        ; attributes ( memf_fast | memf_public )
  759. X        move.l    #-20,d2        ; pri of mem must be low so as to force HD to use chip!!!
  760. X        move.l    #$600000,a0    ; where the mem starts ( 6 mb )
  761. X        move.l    #0,a1        ; pointer to a name for this block 
  762. X                    ; don't want one so pass NULL
  763. X        jsr    addmemlist(a6)    ; do the deed !!!            
  764. X
  765. X        ; you need to be careful after this to NOT run the 
  766. X        ; ronin addmem prog - as otherwise you will get the 
  767. X        ; same block of mem added TWICE ( can you say 'guru' ? :-)
  768. X    ENDC
  769. X
  770. X        movem.l    (A7)+,d0-d7/a0-a6            ; get back all regs
  771. X        rts
  772. X
  773. X
  774. X; ===============================
  775. X; this routine swaps chipdata into/out of a block of chipmem
  776. X
  777. Xswapmem:    lea    chipdata_start(pc),a0            ; where to copy from
  778. X        move.l    #chip_addr,a1                ; where we copy to
  779. X        move.l    #chipdata_end-chipdata_start,d0        ; amount to copy
  780. X
  781. Xcm_loop:    move.b    (a0),d1                    ; we exchange data in and out
  782. X        move.b    (a1),d2            
  783. X        move.b    d2,(a0)+
  784. X        move.b    d1,(a1)+
  785. X        dbf    d0,cm_loop
  786. X        
  787. X        rts
  788. X
  789. X
  790. X;====================================
  791. X; this subroutine puts up the screen pointed to by a1
  792. X; and return d0=0 for left mouse and d0<>0 for right mouse
  793. X; also trashes d1
  794. X
  795. Xdoscreen:    ; setup screen hardware
  796. X
  797. X        move.w    #$1200,bplcon0                ; set for lores, 1 plane
  798. X        move.w    #$0000,bplcon1
  799. X        
  800. X        move.w    #$0000,bpl1mod                ; modulo = 0
  801. X        
  802. X        move.w    #$0038,ddfstart                ; data fetch start
  803. X        move.w    #$00d0,ddfstop                 ; data fetch stop
  804. X        
  805. X        move.w    #$7081,diwstart                ; display window start
  806. X        move.w    #$89b0,diwstop                ; display window stop
  807. X        
  808. X        move.l    a1,d0                    ; setup up copper list bitplane pointers
  809. X        move.w    d0,chip_addr+screen_l-chipdata_start    ; point cop1l load addr to right place
  810. X        swap    d0
  811. X        move.w    d0,chip_addr+screen_h-chipdata_start    ; point cop1h load addr to right place
  812. X
  813. X        move.l    #chip_addr+ourcoplist-chipdata_start,cop1lch ; point copper at our copper list
  814. X        
  815. X        move.w    copjmp1,d0                ; force copper to our list
  816. X        
  817. X        move.w    #%1000000110000000,dmacon        ; enable bitplane and copper dma
  818. X        
  819. X        move.w    #10*50,d1                ; 10 secs worth of vblanks before timeout
  820. X
  821. Xwaittof:    move.w    intreqr,d0
  822. X        btst    #5,d0                    ; vblank int ?
  823. X        beq.s    waittof                    ; wait until tof true
  824. X    
  825. X        move.w    #$0020,intreq                ; clear int
  826. X        
  827. X        btst    #6,$bfe001                ; left button down ?
  828. X        beq.s    lmb
  829. X        
  830. X        btst    #10,potgor                ; right button down
  831. X        beq.s    rmb
  832. X
  833. X        subq.w    #$1,d1                    ; dec frame counter
  834. X        cmp.w    #$0,d1                    ; time up ?
  835. X        beq.s    lmb                    ; default to left mouse button
  836. X        
  837. X        bra.s    waittof        
  838. X        
  839. Xlmb:        moveq    #0,d0
  840. X        bra.s    _exit_1
  841. X            
  842. Xrmb:        moveq    #1,d0
  843. X
  844. X_exit_1:    ; debounce buttons to avoid 'fallthru' - wait for both buttons up
  845. X
  846. X        btst    #10,potgor
  847. X        beq    _exit_1                    ; wait for user to let go of rmb
  848. X        
  849. X        btst    #6,$bfe001
  850. X        beq    _exit_1                    ; wait for user to let go of rmb
  851. X
  852. X        ; now delay 15 vblanks to allow buttons to settle
  853. X        
  854. X        move.w    #15,d2
  855. X        
  856. X_1waittof:    move.w    intreqr,d1
  857. X        btst    #5,d1                    ; vblank int ?
  858. X        beq.s    _1waittof                ; wait until tof true
  859. X    
  860. X        move.w    #$0020,intreq                ; clear int
  861. X
  862. X        subq.w    #1,d2                    ; dec delay counter
  863. X        cmp.w    #$0,d2
  864. X        bne    _1waittof
  865. X        
  866. X        move.w    #%0000000110000000,dmacon        ; disable bitplane and copper dma
  867. X
  868. X        rts
  869. X
  870. X;=========================================
  871. X
  872. X        ; message for people running VMK etc 
  873. X
  874. X        dc.b    "  BootMenu v1.0 J Davis - this is NOT a virus!!!  "
  875. X        
  876. X;=========================================
  877. X
  878. X        even
  879. X
  880. Xchipdata_start:
  881. X        
  882. Xourcoplist:    ; the following copperlist runs our screen
  883. X
  884. X        dc.w    r_bpl1pth
  885. Xscreen_h    dc.w    0        ; set high bitplane address
  886. X
  887. X        dc.w    r_bpl1ptl
  888. Xscreen_l    dc.w    0        ; set low bitplane address
  889. X
  890. X        dc.w    r_color0
  891. X        dc.w    $0026        ; set background 
  892. X
  893. X        dc.w    $6f01,$ff00    ; wait for top of our display
  894. X        
  895. X        dc.w    r_color1
  896. X        dc.w    $0fff        ; set fg 
  897. X
  898. X        dc.w    $7101,$ff00    ; wait til after top line
  899. X
  900. X        dc.w    r_color1
  901. X        dc.w    $0f08        ; set fg 
  902. X
  903. X        dc.w    $7c01,$ff00    ; wait for next bit of text
  904. X
  905. X        dc.w    r_color1
  906. X        dc.w    $006c        ; set fg
  907. X
  908. X        dc.w    $8801,$ff00    ; wait for bottom line
  909. X
  910. X        dc.w    r_color1
  911. X        dc.w    $0fff        ; set fg
  912. X
  913. X        dc.w    $ffff,$fffe    ; wait for next TOF
  914. X        
  915. X        ; the following is the bit map for out first screen
  916. X
  917. Xboard_mode:    dc.l    $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
  918. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  919. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  920. X        dc.l    $0000038C,$60000000,$0000000F,$E0000000,$00018000,$000FC000,$0000E000,$00000000,$00000000,$00000000
  921. X        dc.l    $000006CE,$60000000,$00000006,$60000000,$00000000,$00066000,$00006000,$00000000,$71FDFC00,$00000000
  922. X        dc.l    $0007EC6F,$67E00000,$00000006,$063DC3C7,$C3E383C7,$C00663C3,$CEC363E0,$00000000,$D8CCCC00,$00000000
  923. X        dc.l    $07E00C6D,$E007E000,$00000007,$83666066,$66018666,$6007C660,$6766E600,$000000FD,$8CC0C0FC,$00000000
  924. X        dc.l    $00000C6C,$E0000000,$00000006,$01C661E6,$63C18666,$60066661,$E66663C0,$0000FC01,$8CF0F000,$FC000000
  925. X        dc.l    $0007E6CC,$67E00000,$00000006,$6367C666,$60618666,$60066666,$66066060,$00000001,$8CC0C000,$00000000
  926. X        dc.l    $0000038C,$60000000,$0000000F,$E63603B6,$67C3C3C6,$600FC3C3,$BF03B7C0,$000000FC,$D8C0C0FC,$00000000
  927. X        dc.l    $00000000,$00000000,$00000000,$000F0000,$00000000,$00000000,$00000000,$00000000,$71E1E000,$00000000
  928. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  929. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  930. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  931. X        dc.l    $000007E0,$00004000,$00000006,$18C001E0,$07E00000,$7007C000,$00C00001,$E1E018C1,$E1E1E000,$00000000
  932. X        dc.l    $00000330,$0000C000,$00000006,$19C00330,$03300000,$30036000,$00000003,$333031C3,$33333000,$00000000
  933. X        dc.l    $00000331,$E1E1F331,$E3E33003,$30C00370,$03333000,$300331E3,$31C1F003,$733060C3,$33337000,$00000000
  934. X        dc.l    $000003E3,$3330C3BB,$33333003,$30C003F0,$03E33000,$30033033,$30C30003,$F1F0C0C1,$F1F3F000,$00000000
  935. X        dc.l    $00000333,$3330C35B,$F3333001,$E0C003B0,$03333003,$300330F3,$30C1E003,$B03180C0,$3033B000,$00000000
  936. X        dc.l    $00000333,$3330D31B,$03333001,$E0C0C330,$0331E003,$30036331,$E0C03003,$306300C0,$60633000,$00000000
  937. X        dc.l    $000007E1,$E1E06319,$E331D800,$C3F0C1E0,$07E0C001,$E007C1D8,$C1E3E001,$E1C603F1,$C1C1E000,$00000000
  938. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00038000,$00000000,$00000000,$00000000,$00000000,$00000000
  939. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  940. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  941. X        dc.l    $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
  942. X        
  943. X        ; the following is the bitmap for our second screen
  944. X        
  945. Xscr_mode:    dc.l    $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
  946. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  947. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  948. X        dc.l    $000007E0,$C7800000,$00000000,$00001E00,$00000000,$00410007,$00000000,$0000018C,$FC787800,$00000000
  949. X        dc.l    $00000331,$E3000000,$00000000,$00003300,$00000000,$00630003,$00000000,$000001CC,$B4CCCC00,$00000000
  950. X        dc.l    $0003F331,$E303F000,$00000000,$0000381E,$761E1E3E,$00771E1B,$1E000000,$0000FDEC,$30E180FC,$00000000
  951. X        dc.l    $03F003E3,$330003F0,$00000000,$00001C33,$3B333333,$007F3337,$33000000,$00FC01BC,$30718000,$FC000000
  952. X        dc.l    $00000303,$F3100000,$00000000,$00000730,$333F3F33,$006B3333,$3F000000,$0000019C,$301D8000,$00000000
  953. X        dc.l    $0003F306,$1B33F000,$00000000,$00003333,$30303033,$00633333,$30000000,$0000FD8C,$30CCCCFC,$00000000
  954. X        dc.l    $00000786,$1FF00000,$00000000,$00001E1E,$781E1E33,$00631E1D,$9E000000,$0000018C,$78787800,$00000000
  955. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  956. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  957. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  958. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  959. X        dc.l    $000007E0,$00004000,$00000006,$18C001E0,$07E00000,$7007C000,$00C00001,$E1E018C1,$E1E1E000,$00000000
  960. X        dc.l    $00000330,$0000C000,$00000006,$19C00330,$03300000,$30036000,$00000003,$333031C3,$33333000,$00000000
  961. X        dc.l    $00000331,$E1E1F331,$E3E33003,$30C00370,$03333000,$300331E3,$31C1F003,$733060C3,$33337000,$00000000
  962. X        dc.l    $000003E3,$3330C3BB,$33333003,$30C003F0,$03E33000,$30033033,$30C30003,$F1F0C0C1,$F1F3F000,$00000000
  963. X        dc.l    $00000333,$3330C35B,$F3333001,$E0C003B0,$03333003,$300330F3,$30C1E003,$B03180C0,$3033B000,$00000000
  964. X        dc.l    $00000333,$3330D31B,$03333001,$E0C0C330,$0331E003,$30036331,$E0C03003,$306300C0,$60633000,$00000000
  965. X        dc.l    $000007E1,$E1E06319,$E331D800,$C3F0C1E0,$07E0C001,$E007C1D8,$C1E3E001,$E1C603F1,$C1C1E000,$00000000
  966. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00038000,$00000000,$00000000,$00000000,$00000000,$00000000
  967. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  968. X        dc.l    $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  969. X        dc.l    $ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
  970. X
  971. Xchipdata_end:
  972. X
  973. Xendcapt:    
  974. X
  975. X        END
  976. X
  977. END_OF_FILE
  978. if test 21253 -ne `wc -c <'bootmenu.s'`; then
  979.     echo shar: \"'bootmenu.s'\" unpacked with wrong size!
  980. fi
  981. # end of 'bootmenu.s'
  982. fi
  983. if test -f 'bootmenu.uu' -a "${1}" != "-c" ; then 
  984.   echo shar: Will not clobber existing file \"'bootmenu.uu'\"
  985. else
  986. echo shar: Extracting \"'bootmenu.uu'\" \(5981 characters\)
  987. sed "s/^X//" >'bootmenu.uu' <<'END_OF_FILE'
  988. Xbegin 666 bootmenu
  989. XM```#\P`````````!``````````````,I```#Z0```RDL>0````0B?`````!.0
  990. XMKO[:*$`@+`"L9@``@D'L`%Q.KOZ`0>P`7$ZN_HPCP````0@C_`````$```$$Q
  991. XM0_D```$,(#P`````+'D````$3J[]V"Q`('P`````(GP```&.)'P```'*)GP`A
  992. XM``'*(#P`````(CP`````)#P```%R)CP```!03J[^I").+'D````$3J[^8F$`^
  993. XM`:1@``!`+'D````$0_D```$>(#P`````3J[]V"Q`3J[_Q"(`)#P```$J)CP`P
  994. XM``!B3J[_T"QY````!").3J[^8F$``6(@.0```02PO`````!G```6+'D````$6
  995. XM3J[_?")Y```!"$ZN_H8@/`````!.=0``````````:6YT=6ET:6]N+FQI8G)A5
  996. XM<GD`9&]S+FQI8G)A<GD`&ULS,VU";V]T365N=2!V,2XP&ULP;2P@8GD@2B!$S
  997. XM879I<R`P.2\Q.3DP"FEN<W1A;&QE9"!O:R`M(&UE;G4@=VEL;"!B96-O;64@G
  998. XM86-T:79E(&%T(&YE>'0@<F5B;V]T"@````(!````*``&`````````=X```&BX
  999. XM`P````!X`!H````````"`````;8#`````!0`)`````````(-````````````8
  1000. XM!``$`````````C0`````0F]O=$UE;G4@=C$N,"P@8GD@2B!$879I<R`P.2\Q=
  1001. XM.3DP`&EN<W1A;&QE9"!O:P!M96YU('=I;&P@8F5C;VUE(&%C=&EV92!A="!N3
  1002. XM97AT(')E8F]O=`!/:P``+'D````$(&X`.B/(```"K")(T_P`````(\D```*T;
  1003. XM(DC2_``V(\D```*P0_H`5"1Y```"K"`\```)[!394<C__"QY````!"!Y```"^
  1004. XMM"U(`"H@>0```K`M2``N0>X`(C`\`!8R/```TEA1R/_\1D$]00!23G4`````:
  1005. XM``````````!!^O_^+4@`*@AY``$`O^`!(#D`_``0L*X`%&84)FX`/K?\`!``?
  1006. XM`&((V_P````>3M5.^0#\`<Y(Y__^80``@#/\__\`W_`T(GP`!``P80``C`@`8
  1007. XM``!G+G(',#D`Z``(1D`(```.9Q(S_````.@`2C/\(```Z`!(8`@3_`#_`.@`Z
  1008. XM3%')_]8P.0#?\`0"0"``9R(B?``$!!AA``!""````&<*,_P```#?\=Q@"#/\N
  1009. XM`"``W_'<80``"$S??_].=4'Z`2XB?``$```@/```"``2$!01$,(2P5'(__9.9
  1010. XM=3/\$@``W_$`,_P```#?\0(S_````-_Q"#/\`#@`W_"2,_P`T`#?\)0S_'"!8
  1011. XM`-_PCC/\B;``W_"0(`DSP``$``9(0#/```0``B/\``0```#?\(`P.0#?\(@SP
  1012. XM_(&``-_PEC(\`?0P.0#?\!X(```%9_0S_``@`-_PG`@Y``8`O^`!9Q0(.0`*J
  1013. XM`-_P%F<.4T&R?```9P)@SG``8`)P`0@Y``H`W_`69P#_]@@Y``8`O^`!9P#_/
  1014. XMZC0\``\R.0#?\!X(`0`%9_0S_``@`-_PG%-"M'P``&8`_^0S_`&``-_PEDYU*
  1015. XM("!";V]T365N=2!V,2XP($H@1&%V:7,@+2!T:&ES(&ES($Y/5"!A('9I<G5S;
  1016. XM(2$A("``X````.(```&``"9O`?\``8(/_W$!_P`!@@\(?`'_``&"`&R(`?\`*
  1017. XM`8(/______[_________________________________________________G
  1018. XM____````````````````````````````````````````````````````````]
  1019. XM``````````````````````````````````````````````````````.,8```O
  1020. XM``````_@``````&````/P````.`````````````````````&SF`````````&9
  1021. XM8```````````!F````!@``````!Q_?P````````'[&]GX```````!@8]P\?#/
  1022. XMXX/'P`9CP\[#8^``````V,S,```````'X`QMX`?@``````>#9F!F9@&&9F`'T
  1023. XMQF!G9N8`````_8S`P/P````````,;.`````````&`<9AYF/!AF9@!F9AYF9CV
  1024. XMP```_`&,\/``_``````'YLQGX```````!F-GQF9@889F8`9F9F8&8&`````!M
  1025. XMC,#```````````.,8`````````_F-@.V9\/#QF`/P\._`[?`````_-C`P/P`0
  1026. XM``````````````````````\```````````````````````!QX>``````````!
  1027. XM`````````````````````````````````````````````````````````````
  1028. XM`````````````````````````````````````````````````````````````
  1029. XM````````````````````````````````````````!^```$``````!AC``>`'M
  1030. XMX```<`?```#```'AX!C!X>'@``````````,P``#```````89P`,P`S```#`#_
  1031. XM8``````#,S`QPS,S,``````````#,>'A\S'CXS`#,,`#<`,S,``P`S'C,<'P5
  1032. XM`W,P8,,S,W```````````^,S,,.[,S,P`S#``_`#XS``,`,P,S##``/Q\,#!F
  1033. XM\?/P``````````,S,S##6_,S,`'@P`.P`S,P`S`#,/,PP>`#L#&`P#`SL```\
  1034. XM```````#,S,PTQL#,S`!X,##,`,QX`,P`V,QX,`P`S!C`,!@8S``````````X
  1035. XM!^'AX&,9XS'8`,/PP>`'X,`!X`?!V,'CX`'AQ@/QP<'@````````````````/
  1036. XM``````````````.`````````````````````````````````````````````#
  1037. XM`````````````````````````````````````````````````````````````
  1038. XM``````````````````````````````#_____________________________J
  1039. XM____________________________________________________________3
  1040. XM_________________P``````````````````````````````````````````S
  1041. XM`````````````````````````````````````````````````````````````
  1042. XM```````'X,>````````````>````````00`'`````````8S\>'@`````````-
  1043. XM`S'C````````````,P```````&,``P````````',M,S,`````````_,QXP/P&
  1044. XM`````````#@>=AX>/@!W'AL>``````#][##A@/P``````_`#XS,``_``````)
  1045. XM```<,SLS,S,`?S,W,P````#\`;PP<8``_````````P/S$```````````!S`S(
  1046. XM/S\S`&LS,S\```````&<,!V``````````_,&&S/P`````````#,S,#`P,P!CQ
  1047. XM,S,P``````#]C##,S/P````````'AA_P```````````>'G@>'C,`8QX=G@``>
  1048. XM`````8QX>'@`````````````````````````````````````````````````U
  1049. XM`````````````````````````````````````````````````````````````
  1050. XM`````````````````````````````````````````````````````````````
  1051. XM``````````````````````````````````````````````````````?@``!`G
  1052. XM``````88P`'@!^```'`'P```P``!X>`8P>'AX``````````#,```P``````&3
  1053. XM&<`#,`,P```P`V```````S,P,<,S,S```````````S'AX?,QX^,P`S#``W`#[
  1054. XM,S``,`,QXS'!\`-S,&##,S-P``````````/C,S##NS,S,`,PP`/P`^,P`#`#W
  1055. XM,#,PPP`#\?#`P?'S\``````````#,S,PPUOS,S`!X,`#L`,S,`,P`S#S,,'@`
  1056. XM`[`Q@,`P,[```````````S,S,-,;`S,P`>#`PS`#,>`#,`-C,>#`,`,P8P#`\
  1057. XM8&,P``````````?AX>!C&>,QV`##\,'@!^#``>`'P=C!X^`!X<8#\<'!X```"
  1058. XM```````````````````````````#@```````````````````````````````#
  1059. XM`````````````````````````````````````````````````````````````
  1060. XM````````````````````````````````````````````________________T
  1061. XM_____________________________________P```^P````6`````````"P`5
  1062. XM```V````/````%H```!@````9@```*(```"Z````V@```/0```&:```!G@``V
  1063. XM`:X```&R```!P@```=8```)$```"4@```EX```)H```"@````HH````````#Q
  1064. XM\`````%W8@`````!!`````%L;6(````$*`````%R;6(````$+`````%S=6T`_
  1065. XM```"G@````%B8VAK```#$`````%E>&ET````V`````%N97AT```#/`````)E%
  1066. XM=&5X=````````8P````";6QO;W````````)R`````G=B;7-G```````!"```:
  1067. XM``)F<F]M=V(``````!H````"9V]?<&%L``````-B`````FUS9W1X=``````!L
  1068. XM*@````)N8F]A<F0``````S@````"7V5X:71?,0````0N`````F-M7VQO;W``E
  1069. XM```#A`````)D;W-N86UE`````1X````"96YD8V%P=`````RD`````F9R;VUDZ
  1070. XM;W,`````F@````)G861T97AT`````C0````":6YS=&%L;`````(X`````FYOW
  1071. XM7S@S-S(````#:@````)S:'5T7W5P`````S`````"<W1A<G1U<```````````R
  1072. XM`G-W87!M96T````#=`````)W86ET=&]F`````_8````"8V]L9&-A<'0```*XR
  1073. XM`````F-O;VQC87!T```"[@````)D;W-C<F5E;@```Y(````"97AI=%]D;W,`2
  1074. XM``#\`````F=A9&ET97AT```!R@````)S8W)?;6]D90``"+P````"<V-R965NW
  1075. XM7V@```2F`````G-C<F5E;E]L```$J@````-?,7=A:71T;V8```````1*````+
  1076. XM`V)O9'ET97AT,0```````=X````#8F]D>71E>'0R```````"``````-B;V1YA
  1077. XM=&5X=#,```````(-`````V-A<'1S=&%R=````````K@````#:6YT=6EN86UEG
  1078. XM```````!#`````-B;V%R9%]M;V1E``````34`````V)O9'EI=&5X=#$`````$
  1079. XM`8X````#8F]D>6ET97AT,@`````!H@````-B;V1Y:71E>'0S``````&V````,
  1080. XM`V-O9&5T87)G970``````JP````#;W5R8V]P;&ES=``````$I`````-R96)U#
  1081. XM:6QD7V%L;`````+H`````V-H:7!D871A7V5N9```#*0````#8V]L9&-A<'1AP
  1082. XM9&1R```"M`````-C;V]L8V%P=&%D9'(```*P````!&-H:7!D871A7W-T87)TD
  1083. X.``````2D`````````_)L)
  1084. X``
  1085. Xend
  1086. Xsize 4244
  1087. END_OF_FILE
  1088. if test 5981 -ne `wc -c <'bootmenu.uu'`; then
  1089.     echo shar: \"'bootmenu.uu'\" unpacked with wrong size!
  1090. fi
  1091. # end of 'bootmenu.uu'
  1092. fi
  1093. if test -f 'bootmenu0.uu' -a "${1}" != "-c" ; then 
  1094.   echo shar: Will not clobber existing file \"'bootmenu0.uu'\"
  1095. else
  1096. echo shar: Extracting \"'bootmenu0.uu'\" \(532 characters\)
  1097. sed "s/^X//" >'bootmenu0.uu' <<'END_OF_FILE'
  1098. Xbegin 666 bootmenu.info
  1099. XMXQ```0``````R`!@`",`$0`%``,``0`CNC``````````````````````````F
  1100. XM`````R0`(H00`````````6X```!5``&Z>`````````^@````+@%R`)?__P``Y
  1101. XM```"0`)_``%=!```````P!*`````````````6@`H_____P`!____Z0``````<
  1102. XM`````",`$``"``&\.`,```````!__\````!_X<````!_X<````!_X<````!_*
  1103. XM_\````````````````````/ZJ/````/U1'@```/JHC@```/5<1@```.J__@`4
  1104. XM``-5__@```*K__@```/___@``````````/____^``/_____``/_____@`/__^
  1105. XM___@`/_____@`/_____@`/_____@`/P']0_@`/P.ZH?@`/P=U4?@`/P[BJ?@1
  1106. XD`/QW``?@`/SN``?@`,W<``?@`/P```?@``````````````$`?
  1107. X``
  1108. Xend
  1109. Xsize 351
  1110. END_OF_FILE
  1111. if test 532 -ne `wc -c <'bootmenu0.uu'`; then
  1112.     echo shar: \"'bootmenu0.uu'\" unpacked with wrong size!
  1113. fi
  1114. # end of 'bootmenu0.uu'
  1115. fi
  1116. echo shar: End of archive 1 \(of 1\).
  1117. cp /dev/null ark1isdone
  1118. MISSING=""
  1119. for I in 1 ; do
  1120.     if test ! -f ark${I}isdone ; then
  1121.     MISSING="${MISSING} ${I}"
  1122.     fi
  1123. done
  1124. if test "${MISSING}" = "" ; then
  1125.     echo You have the archive.
  1126.     rm -f ark[1-9]isdone
  1127. else
  1128.     echo You still need to unpack the following archives:
  1129.     echo "        " ${MISSING}
  1130. fi
  1131. ##  End of shell archive.
  1132. exit 0
  1133. -- 
  1134. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  1135. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  1136. Post requests for sources, and general discussion to comp.sys.amiga.misc.
  1137.